package musgo

import org.springframework.dao.DataIntegrityViolationException

class ArtistaController extends BaseController {

    static allowedMethods = [save: "POST", update: "POST", delete: "POST"]
    
    
    //Closure para controlar los accesos de los usuarios              
    def beforeInterceptor = [action:this.&auth, except:['show', 'list','login','create','imagen']]
 
    def index() {
        redirect(action: "list", params: params)
    }
    
    def profile(){
                    //parama.ide tiene la ide del artista reciencreado en principal
                                    //params.nick variable que tiene la seccion abierta
	def dataArtista
        if(params.ide!=null){         //mira si llega un id o un nick para abrir la cuenta y//trae de la base de datos el artista
	 dataArtista = Artista.get(params.ide)
        }
        if(params.nick != null){               //esto es redundante solo con la validacion de la session es suficiente , no lo cambio por que no se si puede darñar algo
            
            
            def ide=Artista.findByNick(params.nick)
            dataArtista=Artista.get(ide.id)
            
        }else{
            dataArtista=Artista.findByNick(session.nick)    //con esta vlaidacion de pued hcae rtodo
        }
        
	if(dataArtista.imagenperfil.equals(null)){  //si no se metio una foto al principio muestra la foto con id =1 por defecto, una foto de perfil vacia
			
		dataArtista.imagenperfil= Imagen.get(1);
		}
         [artista:dataArtista]
    }
    
    def imagen = { ///esta funcion es utilizada para mostrar fotos
		
	
	def imagen = Imagen.get(params.id)
	log.debug "Mostrando imagen ${imagen?.nombre}"
	response.setHeader("Content-disposition", "attachment; filename=${imagen?.nombre}")
	response.contentType = imagen?.tipoContenido
	byte[] archivo = imagen?.archivo
	response.contentLength = imagen?.tamano
	response.outputStream << imagen.archivo
		
	}
    
    def login(){
        
        if(request.method == "GET"){
            session.nick = null
            def artista = new Artista()
        }else{
            def artista = Artista.findByNickAndPassword(params.nick,params.password)
            
            if(artista){
                session.nick = artista.nick
                session.password = artista.password
                if(artista.nick == 'admin'){ //esto no lo usamos
                    redirect(uri:'/cart/list')
                }else{
                    redirect(action:'profile', params:[ide:artista.id])
                }
             }else{
                redirect(uri:'/artista/login')
                
             }
        }
    }
    

    def list(Integer max) {
        params.max = Math.min(max ?: 10, 100)
        [artistaInstanceList: Artista.list(params), artistaInstanceTotal: Artista.count()]
    }

    def create() {
        Imagen imagen;                         //vamos a tomar la imagen que se cargo validar y guaradar en la base de datos
	
		
	if (params.imagenp.equals(null)){
			}
	if(!params.imagenp.equals("noseimportofoto")){
		def f = request.getFile("imagenp")
			if (!f.empty) {
				imagen = new Imagen(
					nombre : f.originalFilename
					, tipoContenido : f.contentType
					, tamano : f.size
					, archivo : f.bytes
					).save()
				}
		}
		
	def datartista= new Artista(params)
	datartista.imagenperfil=imagen
		
	if(!datartista.hasErrors() && datartista.save()){
            session.nick=datartista.nick
            redirect(action:"profile", params:[ide:datartista.id])	
	}
	[artistaInstance:datartista]
        //[artistaInstance: new Artista(params)]
    }

    def save() {
        def artistaInstance = new Artista(params)
        if (!artistaInstance.save(flush: true)) {
            render(view: "create", model: [artistaInstance: artistaInstance])
            return
        }

        flash.message = message(code: 'default.created.message', args: [message(code: 'artista.label', default: 'Artista'), artistaInstance.id])
        redirect(action: "show", id: artistaInstance.id)
    }

    def show(Long id) {
        def artistaInstance = Artista.get(id)
        if (!artistaInstance) {
            flash.message = message(code: 'default.not.found.message', args: [message(code: 'artista.label', default: 'Artista'), id])
            redirect(action: "list")
            return
        }

        [artistaInstance: artistaInstance]
    }

    def edit(Long id) {
        
        
        def artistaInstance = Artista.get(params.ide)
        if (!artistaInstance) {
            flash.message = message(code: 'default.not.found.message', args: [message(code: 'artista.label', default: 'Artista'), id])
            redirect(action: "login")
            return
        }

        [artistaInstance: artistaInstance]
    }

    def update(Long id, Long version) {
        
        if(!params.foto.equals("true")){
        def artistaInstance = Artista.get(id)
        if (!artistaInstance) {
            flash.message = message(code: 'default.not.found.message', args: [message(code: 'artista.label', default: 'Artista'), id])
            redirect(action: "profile")
            return
        }
        artistaInstance.properties = params

        if (!artistaInstance.save(flush: true)) {
            render(view: "edit", model: [artistaInstance: artistaInstance])
            return
        }

        flash.message = message(code: 'default.updated.message', args: [message(code: 'artista.label', default: 'Artista'), artistaInstance.id])
        redirect(action: "profile", id: artistaInstance.id)
    }else{                //cambiar la foto
        def artistaInstance = Artista.get(params.ide)
        
        if(artistaInstance.imagenperfil.id != 1){
            def imagenInstance = Imagen.get(artistaInstance.imagenperfil.id)
            imagenInstance.delete()
        }
        Imagen imagen;                         //vamos a tomar la imagen que se cargo validar y guaradar en la base de datos
	 
	def f = request.getFile("imagen")
	if (!f.empty) {
		imagen = new Imagen(nombre : f.originalFilename
			, tipoContenido : f.contentType, tamano : f.size
			, archivo : f.bytes).save()
		artistaInstance.imagenperfil=imagen	
            }else{
            artistaInstance.imagenperfil=Imagen.get(1);   
            }
        artistaInstance.save(flush: true)
        redirect(action: "profile", ide: artistaInstance.id)
        
            
    }
  }
    
   def contacto(){
       redirect(controller:"home", action:"contacto")
   }
   

    def delete(Long id) {
        def artistaInstance = Artista.get(id)
        if (!artistaInstance) {
            flash.message = message(code: 'default.not.found.message', args: [message(code: 'artista.label', default: 'Artista'), id])
            redirect(action: "list")
            return
        }

        try {
            artistaInstance.delete(flush: true)
            flash.message = message(code: 'default.deleted.message', args: [message(code: 'artista.label', default: 'Artista'), id])
            redirect(action: "list")
        }
        catch (DataIntegrityViolationException e) {
            flash.message = message(code: 'default.not.deleted.message', args: [message(code: 'artista.label', default: 'Artista'), id])
            redirect(action: "show", id: id)
        }
    }
}
